package com.hulk.dryad.manage.framework.storage;

import com.hulk.dryad.manage.framework.storage.config.StorageProperties;
import org.springframework.core.io.Resource;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.stream.Stream;

/**
 * 对象存储接口
 * @author hulk
 */
public interface Storage {


    /**
     * 存储一个文件对象
     *
     * @param inputStream   文件输入流
	 * @param contextType   文件类型
	 * @param directory 文件路径
     * @param filename  文件名
	 * @param bucket  cloud模式为桶名称，local模式为根目录
     */
    void store(InputStream inputStream, String contextType, String filename, String directory, String bucket);

    Stream<Path> loadAll( String directory, String bucket);

    Path loadPath(String filename, String directory, String bucket);

    Resource loadAsResource(String filename, String directory, String bucket);

	InputStream loadAsInputStream(String filename, String directory, String bucket) ;

    void delete(String filename, String directory, String bucket);

    String generateUri(String filename, String directory, String bucket);

	String getHost(String filename, String directory, String bucket);

	StorageProperties getProp() ;
}